파서의 선택
파이썬에서 XML 다루는 도구로 표준 DOM에 가까운 minidom이 있지만, 현재 파이썬 커뮤니티에서는 ElementTree를 권장한다. ElementTree는 DOM을 좀더 pythonic하게 쓰자는 생각에서 만든 것으로, 이름에서 알 수 있듯이 XML의 구성 요소 중에서 Element를 중심으로 트리를 구성한다. 원래 DOM에서는 Node로 트리가 구성되며 Element는 Node의 일종으로 취급된다. 이 차이는 이를테면 다음과 같은 XML 문서가 있을 경우,
<h1>Hello<strong>World</strong>!!</h1>
ElementTree에서는 다음처럼 노드가 구성된다.
- Element h1
- h1.text = Hello
- Element strong
- strong.text = World
- strong.tail = !!
DOM에서는 다음과 같다.
- Element h1
- Text Hello
- Element strong
- Text World
- Text !!
누 가 봐도 DOM이 더 자연스러운데 왜 ElementTree가 더 pythonic하다는 것일까? 그 이유는 DOM의 API가 상당히 번거롭기 때문이다. XML의 구조를 온전히 반영하려다보니 간단하게 키/값만 엑세스하고 싶을 때는 몹시 귀찮다. 실제로 XML이 쓰일 때 위의 경우처럼 텍스트 사이사이의 엘리먼트가 많이 들어가고, 또 그 순서가 중요한 경우는 HTML 외에는 거의 없다. 그러다보니 API가 좀더 단순한 ElementTree가 유리한 것이다. 얼마나 유리한지 한 번 비교해보자.
pyquery
lxml 성능
BeautifulSoup
minidom
html5lib